home *** CD-ROM | disk | FTP | other *** search
/ Aminet 2 / Aminet AMIGA CDROM (1994)(Walnut Creek)[Feb 1994][W.O. 44790-1].iso / Aminet / misc / amag / sh9302a.lha / A1200 (S.6) / A1200Demo.asm < prev    next >
Assembly Source File  |  1993-08-11  |  19KB  |  1,167 lines

  1.  
  2.     *************************************************
  3.     *    A1200 Beispielprogramm V40.1 (11.8.1993)   *
  4.     *     von Alexander Kochann und Oliver Reiff    *
  5.     *         geschrieben mit DevPacIII        *
  6.     *************************************************
  7.  
  8. loclea    macro
  9.     pea    \1
  10.     bsr    GetString
  11.     move.l    (sp)+,\2
  12.     endm
  13.  
  14. VERSION    macro
  15.     endm
  16. LEN    macro
  17.     endm
  18. CATALOG    macro
  19.     endm
  20. CATDATE    macro
  21.     endm
  22. D    macro
  23.     endm
  24. DK    macro
  25.     endm
  26. E    macro
  27.     endm
  28. F    macro
  29.     endm
  30. GB    macro
  31.     endm
  32. I    macro
  33.     endm
  34. N    macro
  35.     endm
  36. NL    macro
  37.     endm
  38. P    macro
  39.     endm
  40. S    macro
  41.     endm
  42.  
  43. Red            equ    %10000000
  44. Green            equ    %11000000
  45. Blue            equ    %01000000
  46.  
  47. FALSE            equ    0
  48. TRUE            equ    1
  49. TAG_DONE        equ    0
  50.  
  51. RemoveGList        equ    -444
  52. GT_RefreshWindow    equ    -84
  53. FreeGadgets        equ    -36
  54. FreeVisualInfo        equ    -132
  55. GetVisualInfoA        equ    -126
  56. CreateContext        equ    -114
  57. CreateGadgetA        equ    -30
  58. AddGList        equ    -438
  59. RefreshGadgets        equ    -222
  60. OpenAmigaGuideA        equ    -54
  61. CloseAmigaGuide        equ    -66
  62. GetProgramDir        equ    -600
  63. ScreenToFront        equ    -252
  64. FindTask        equ    -294
  65. Forbid            equ    -132
  66. WaitPort        equ    -384
  67. OpenLocale        equ    -156
  68. OpenCatalogA        equ    -150
  69. CloseScreen        equ    -66
  70. CloseWindow        equ    -72
  71. InitRastPort        equ    -198
  72. WritePixel        equ    -324
  73. SetAPen            equ    -342
  74. Wait            equ    -318
  75. GetMsg            equ    -372
  76. ReplyMsg        equ    -378
  77. InitBitMap        equ    -390
  78. CloseLibrary        equ    -414
  79. OpenLibrary        equ    -552
  80. PubScreenStatus        equ    -552
  81. EasyRequestArgs        equ    -588
  82. OpenWindowTagList    equ    -606
  83. OpenScreenTagList    equ    -612
  84. NewObjectA        equ    -636
  85. DisposeObject        equ    -642
  86. WritePixelArray8    equ    -786
  87. SetWindowPointerA    equ    -816
  88. LoadRGB32        equ    -882
  89. AllocBitMap        equ    -918
  90. FreeBitMap        equ    -924
  91. CxMsgID            equ    -150
  92. GetCatalogStr        equ    -72
  93. AddPort            equ    -354
  94. CreateMsgPort        equ    -666
  95. RemPort            equ    -360
  96. DeleteMsgPort        equ    -672
  97. CloseCatalog        equ    -36
  98. CloseLocale        equ    -42
  99. RemoveCxObj        equ    -102
  100. DeleteCxObjAll        equ    -54
  101. ActivateCxObj        equ    -42
  102. CreateCxObj        equ    -30
  103. CxBroker        equ    -36
  104. AttachCxObj        equ    -84
  105. SetFilter        equ    -120
  106.  
  107. rm_ARG0            equ    40
  108. LN_NAME            equ    10
  109. wd_RPort        equ    50
  110. wd_UserPort        equ    86
  111. im_Class        equ    20
  112. im_IAddress        equ    28
  113. gg_GadgetID        equ    38
  114. rp_SIZEOF        equ    100
  115. bm_SIZEOF        equ    40
  116. es_SIZEOF        equ    30
  117. sc_ViewPort        equ    44
  118. sc_RastPort        equ    84
  119. gb_ChipRevBits0        equ    236
  120. pr_MsgPort        equ    92
  121. pr_CLI            equ    172
  122. AttnFlags        equ    296
  123. LIB_VERSION        equ    20
  124.  
  125. AFB_68020        equ    1
  126. BUTTON_KIND        equ    1
  127. IDCMP_GADGETUP        equ    $40
  128.  
  129. SA_PubName        equ    $8000002f
  130. SA_DisplayID        equ    $80000032
  131. SA_Pens            equ    $8000003a
  132. SA_Parent        equ    $8000003d
  133. SA_Draggable        equ    $8000003e
  134. SA_Interleaved        equ    $80000042
  135. SA_Colors32        equ    $80000043
  136. WA_NewLookMenus        equ    $80000093
  137. WA_Pointer        equ    $80000097
  138. WA_BusyPointer        equ    $80000098
  139. WA_PointerDelay        equ    $80000099
  140. WA_PubScreenName    equ    $80000078
  141. POINTERA_BitMap        equ    $80039001
  142. POINTERA_XOffset    equ    $80039002
  143. POINTERA_YOffset    equ    $80039003
  144. POINTERA_WordWidth    equ    $80039004
  145. POINTERA_XResolution    equ    $80039005
  146. POINTERA_YResolution    equ    $80039006
  147.  
  148. *--------------------------------
  149.  
  150. PrgStart
  151.     opt    o+
  152.     move.l    4.w,a6
  153.     
  154.     sub.l    a1,a1
  155.     jsr    FindTask(a6)
  156.     move.l    d0,a2
  157.     tst.l    pr_CLI(a2)
  158.     bne.s    .VonCLI
  159.     
  160. .VonWB    lea    pr_MsgPort(a2),a0
  161.     jsr    WaitPort(a6)
  162.     jsr    GetMsg(a6)
  163.     lea    MyWBMsg,a0
  164.     move.l    d0,(a0)
  165.     
  166. .VonCLI    cmp.w    #39,LIB_VERSION(a6)    
  167.     blt    Error
  168.  
  169.     bsr    OpenLibs
  170.  
  171.     move.w    AttnFlags(a6),d0
  172.     btst    #AFB_68020,d0
  173.     beq    No68020    
  174.  
  175.     bsr    OpenCatalog
  176.     bsr    InitARexx
  177.     bsr    InitHotkey    
  178.  
  179.     move.l    GfxBase,a6
  180.     move.b    gb_ChipRevBits0(a6),d0
  181.     and.b    #$f,d0        * AA-Chipset vorhanden
  182.     cmp.b    #$f,d0        * und aktiviert ?
  183.     bne    NoAAChips
  184.  
  185.     move.l    IntBase,a6
  186.     lea    ScreenData,a0
  187.     loclea    ScreenName,20(a0)
  188.     lea    ScreenTags,a1
  189.     jsr    OpenScreenTagList(a6)        
  190.     lea    Screen,a0
  191.     move.l    d0,(a0)
  192.     beq    NoScreen
  193.  
  194.     move.l    d0,a0
  195.     moveq    #0,d0
  196.     jsr    PubScreenStatus(a6)
  197.  
  198.     lea    WindowData,a0
  199.     loclea    WindowName,26(a0)
  200.     lea    WindowTags,a1
  201.     jsr    OpenWindowTagList(a6)
  202.     lea    Window,a0
  203.     move.l    d0,(a0)
  204.     lea    RastPort,a1
  205.     move.l    d0,a0
  206.     move.l    wd_RPort(a0),(a1)
  207.  
  208.     move.l    GfxBase,a6
  209.     move.w    #640,d0
  210.     moveq    #2,d1
  211.     moveq    #8,d2
  212.     moveq    #0,d3
  213.     sub.l    a0,a0
  214.     jsr    AllocBitMap(a6)
  215.     lea    TempBM,a0
  216.     move.l    d0,(a0)
  217.     beq.s    NoBitMap
  218.  
  219.     lea    TempRP,a1
  220.     jsr    InitRastPort(a6)
  221.  
  222.     lea    TempRP,a1
  223.     move.l    TempBM,4(a1)
  224.  
  225.     bsr    DrawColors
  226.     bsr    OpenGadgetWindow
  227.     bsr    SetPointer
  228.  
  229. *---------------------
  230.  
  231. MainLoop    move.l    4.w,a6
  232.     moveq    #-1,d0
  233.     jsr    Wait(a6)
  234.  
  235.     moveq    #0,d7
  236.     bsr    GetGadgetMsg
  237.     bsr    GetCxMsg
  238.     bsr    GetARexxMsg
  239.     tst.l    d7
  240.     bne.s    Ende
  241.     
  242.     move.l    4.w,a6
  243.     move.l    Window,a0
  244.     move.l    wd_UserPort(a0),a0
  245.     jsr    GetMsg(a6)
  246.     tst.l    d0
  247.     beq.s    MainLoop
  248.     move.l    d0,a0
  249.     move.l    im_Class(a0),d0
  250.  
  251.     cmp.l    #$200,d0        * CloseWindow    
  252.     bne.s    MainLoop
  253.  
  254.  
  255.  
  256. *---------------------
  257.  
  258. Ende    move.l    GfxBase,a6
  259.     move.l    TempBM,a0
  260.     jsr    FreeBitMap(a6)
  261. NoBitMap    
  262.     bsr    CloseGadgetWindow
  263.     bsr    FreeHotkey
  264.     bsr    FreeARexx
  265.     bsr    FreeCatalog
  266.     move.l    IntBase,a6
  267.     move.l    Window,a0
  268.     jsr    CloseWindow(a6)
  269.     move.l    Screen,a0
  270.     jsr    CloseScreen(a6)
  271.     move.l    ExtSprite,a0
  272.     jsr    DisposeObject(a6)
  273.     bsr    CloseLibs
  274.  
  275.     move.l    MyWBMsg,d7
  276.     beq.s    .exit
  277.  
  278.     move.l    4.w,a6
  279.     jsr    Forbid(a6)
  280.     move.l    d7,a1
  281.     jsr    ReplyMsg(a6)
  282. .exit    rts
  283.     
  284. *----------
  285. Error    moveq    #20,d0
  286.     rts
  287.  
  288. *---------------------
  289.  
  290. NoAAChips
  291.     loclea    ReqNoAA,a0
  292.     bsr.s    ShowReq
  293.     bsr    CloseLibs
  294.     bra    Error
  295. No68020
  296.     loclea    ReqNo68020,a0
  297.     bsr.s    ShowReq
  298.     bsr    CloseLibs
  299.     bra    Error
  300. NoScreen
  301.     loclea    ReqNoScreen,a0
  302.     bsr.s    ShowReq
  303.     bsr    CloseLibs
  304.     bra    Error
  305.  
  306. ShowReq    lea    EasyStruct,a1
  307.     move.l    a0,12(a1)
  308.     sub.l    a0,a0
  309.     sub.l    a2,a2
  310.     sub.l    a3,a3
  311.     move.l    IntBase,a6
  312.     jmp    EasyRequestArgs(a6)
  313.  
  314. *-----------------------
  315.  
  316. OpenLibs
  317.     move.l    4.w,a6
  318.  
  319.     moveq    #36,d0
  320.     lea    DosName,a1
  321.     jsr    OpenLibrary(a6)
  322.     lea    DosBase,a0
  323.     move.l    d0,(a0)
  324.  
  325.     moveq    #36,d0
  326.     lea    CxName,a1
  327.     jsr    OpenLibrary(a6)
  328.     lea    CxBase,a0
  329.     move.l    d0,(a0)
  330.     
  331.     moveq    #38,d0
  332.     lea    LocName,a1
  333.     jsr    OpenLibrary(a6)
  334.     lea    LocBase,a0
  335.     move.l    d0,(a0)
  336.  
  337.     moveq    #39,d0
  338.     lea    AgName,a1
  339.     jsr    OpenLibrary(a6)
  340.     lea    AgBase,a0
  341.     move.l    d0,(a0)
  342.  
  343.     lea    GfxName,a1
  344.     moveq    #39,d0
  345.     jsr    OpenLibrary(a6)
  346.     lea    GfxBase,a0
  347.     move.l    d0,(a0)
  348.  
  349.     lea    IntName,a1
  350.     moveq    #39,d0
  351.     jsr    OpenLibrary(a6)
  352.     lea    IntBase,a0
  353.     move.l    d0,(a0)
  354.  
  355.     lea    GadName,a1
  356.     moveq    #36,d0
  357.     jsr    OpenLibrary(a6)
  358.     lea    GadBase,a0
  359.     move.l    d0,(a0)
  360.  
  361.     rts
  362.  
  363. *-----------------------
  364.  
  365. CloseLibs
  366.     move.l    4.w,a6
  367.     move.l    CxBase,a1
  368.     jsr    CloseLibrary(a6)
  369.     move.l    LocBase,a1
  370.     jsr    CloseLibrary(a6)
  371.     move.l    AgBase,a1
  372.     jsr    CloseLibrary(a6)
  373.     move.l    DosBase,a1
  374.     jsr    CloseLibrary(a6)
  375.     move.l    IntBase,a1
  376.     jsr    CloseLibrary(a6)
  377.     move.l    GfxBase,a1
  378.     jsr    CloseLibrary(a6)
  379.     move.l    GadBase,a1
  380.     jsr    CloseLibrary(a6)
  381.     rts
  382.  
  383. *-----------------------
  384.  
  385. DrawColors
  386.     movem.l    d0-a6,-(sp)
  387.     move.l    GfxBase,a6
  388.     bsr    DrawFirstLine_1
  389.     
  390.     move.w    #Red,d0
  391.     moveq    #1,d1
  392.     moveq    #1,d2
  393.     bsr.s    DrawColorBox
  394.     move.w    #Green,d0
  395.     moveq    #1,d1
  396.     bsr.s    DrawColorBox
  397.     move.w    #Red,d0
  398.     moveq    #-1,d1
  399.     bsr.s    DrawColorBox
  400.     move.w    #Blue,d0
  401.     moveq    #1,d1
  402.     bsr.s    DrawColorBox
  403.     move.w    #Green,d0
  404.     moveq    #-1,d1
  405.     bsr.s    DrawColorBox
  406.     move.w    #Red,d0
  407.     moveq    #1,d1
  408.     bsr.s    DrawColorBox
  409.     move.w    #Blue,d0
  410.     moveq    #-1,d1
  411.     bsr.s    DrawColorBox
  412.     move.w    #Green,d0
  413.     moveq    #1,d1
  414.     bsr.s    DrawColorBox
  415.     move.w    #Blue,d0
  416.     moveq    #1,d1
  417.     bsr.s    DrawColorBox
  418.     
  419.     bsr.s    DrawLastLines
  420.     movem.l    (sp)+,d0-a6
  421.     rts
  422. *-------
  423. DrawColorBox
  424.     move.l    d2,-(sp)
  425.     move.l    d1,d7
  426.     move.l    d0,d6
  427.     lea    Pixels,a0
  428.     moveq    #0,d4
  429. .Loop_3    moveq    #3,d3
  430. .Loop_2    moveq    #0,d2
  431. .Loop_1    move.w    d2,d1
  432.     tst.b    d7
  433.     bgt.s    .Ok_1
  434.     moveq    #63,d1
  435.     sub.w    d2,d1
  436. .Ok_1    mulu    d4,d1
  437.     divu    #63,d1    
  438.     move.w    d6,d0
  439.     add.w    d1,d0
  440.     move.b    d0,(a0)+
  441.       addq.w    #1,d2
  442.     cmp.w    #64,d2
  443.     bne.s    .Loop_1
  444.     dbra    d3,.Loop_2
  445.      addq.w    #1,d4
  446.     cmp.w    #64,d4
  447.     bne.s    .Loop_3
  448.     move.l    (sp),d0
  449.     lea    TempRP,a1
  450.     lea    Pixels,a2
  451.     move.l    RastPort,a0
  452.     moveq    #0,d1
  453.     move.w    d0,d2
  454.     add.w    #63,d2
  455.     move.w    #256,d3
  456.     jsr    WritePixelArray8(a6)
  457.     move.l    (sp)+,d2
  458.     add.w    #64,d2
  459.     rts
  460. *-------
  461. DrawLastLines
  462.     lea    Pixels,a0
  463.     move.w    #255,d7
  464. .Loop_1    move.w    #Red,d0
  465.     move.w    #255,d6
  466.     sub.w    d7,d6
  467.     lsr.w    #2,d6
  468.     add.w    d6,d0
  469.     moveq    #63,d1
  470. .Loop_2    move.b    d0,(a0)+
  471.     dbra    d1,.Loop_2
  472.     dbra    d7,.Loop_1
  473.  
  474.     lea    TempRP,a1
  475.     lea    Pixels,a2
  476.     move.l    RastPort,a0
  477.     move.w    #577,d0
  478.     moveq    #0,d1
  479.     move.w    #633,d2
  480.     move.w    #256,d3
  481.     jmp    WritePixelArray8(a6)
  482.     rts
  483. *-------
  484. DrawFirstLine_1    
  485.     move.l    GfxBase,a6
  486.     clr.b    Smooth
  487.     move.w    #255,d7
  488. .Loop    move.w    #255,d2
  489.     sub.w    d7,d2
  490.     move.l    d2,d0
  491.     and.w    #3,d0
  492.     addq    #4,d0
  493.     move.l    RastPort,a1
  494.     jsr    SetAPen(a6)
  495.     moveq    #0,d0
  496.     move.l    d2,d1
  497.     move.l    RastPort,a1
  498.     jsr    WritePixel(a6)
  499.     dbra    d7,.Loop
  500.     rts
  501. *-------
  502. DrawFirstLine_2    
  503.     move.l    GfxBase,a6
  504.     st.b    Smooth
  505.     moveq    #4,d0
  506.     move.l    RastPort,a1
  507.     jsr    SetAPen(a6)
  508.     move.w    #255,d7
  509. .Loop    moveq    #0,d0
  510.     move.l    d7,d1
  511.     move.l    RastPort,a1
  512.     jsr    WritePixel(a6)
  513.     dbra    d7,.Loop
  514.     rts
  515.  
  516. *-----------------------
  517.  
  518. SetPointer
  519.     move.l    GfxBase,a6
  520.     lea    PointerBM,a0
  521.     moveq    #2,d0
  522.     moveq    #16,d1
  523.     moveq    #16,d2
  524.     jsr    InitBitMap(a6)
  525.     lea    PointerBM,a1
  526.     lea    PointerPlane0,a0
  527.     move.l    a0,8(a1)        * Erste BitPlane
  528.     lea    PointerPlane1,a0
  529.     move.l    a0,12(a1)        * Zweite BitPlane
  530.  
  531.     lea    SpriteTags,a2
  532.     move.l    a1,4(a2)
  533.     lea    PointerClass,a1
  534.     sub.l    a0,a0
  535.     move.l    IntBase,a6
  536.     jsr    NewObjectA(a6)
  537.     lea    ExtSprite,a0
  538.     move.l    d0,(a0)
  539.  
  540.     move.l    Window,a0
  541.     lea    PointerTags,a1
  542.     move.l    ExtSprite,4(a1)
  543.     move.l    IntBase,a6
  544.     jmp    SetWindowPointerA(a6)
  545.  
  546. *-----------------------
  547.  
  548. OpenCatalog
  549.     move.l    LocBase,d0
  550.     beq.s    .exit
  551.     move.l    d0,a6
  552.     sub.l    a0,a0
  553.     jsr    OpenLocale(a6)
  554.     lea    Locale1,a0
  555.     move.l    d0,(a0)
  556.     beq.s    .exit
  557.     
  558.     move.l    d0,a0
  559.     lea    CatName,a1
  560.     sub.l    a2,a2
  561.     jsr    OpenCatalogA(a6)
  562.     lea    Catalog1,a0
  563.     move.l    d0,(a0)
  564.  
  565. .exit    rts
  566.  
  567. *-------
  568.  
  569. FreeCatalog
  570.     move.l    LocBase,d0
  571.     beq.s    .exit
  572.     move.l    d0,a6
  573.     
  574.     move.l    Catalog1,a0
  575.     jsr    CloseCatalog(a6)
  576.     
  577.     move.l    Locale1,a0
  578.     jsr    CloseLocale(a6)
  579.  
  580. .exit    rts
  581.  
  582. *-------
  583.  
  584. GetString
  585.     movem.l    d0-d1/a0-a1/a6,-(sp)
  586.     move.l    LocBase,d0
  587.     beq.s    .Ende
  588.     move.l    d0,a6
  589.     move.l    Catalog1,d0
  590.     beq.s    .Ende
  591.     move.l    24(sp),a1    String
  592.     moveq    #0,d0
  593.     move.l    a1,d1
  594.     lea    LOCALE_START,a0
  595.     sub.l    a0,d1
  596.     beq.s    .GetIt
  597. .Loop    tst.b    (a0)+
  598.     bne.s    .Ok
  599.     addq.l    #1,d0
  600. .Ok    subq.l    #1,d1
  601.     bne.s    .Loop
  602. .GetIt    move.l    Catalog1,a0
  603.     jsr    GetCatalogStr(a6)
  604.     move.l    d0,24(sp)
  605. .Ende    movem.l    (sp)+,d0-d1/a0-a1/a6
  606.     rts
  607.  
  608. *-------
  609.  
  610. InitARexx    move.l    4.w,a6
  611.     jsr    CreateMsgPort(a6)
  612.     lea    ARexxPort,a0
  613.     move.l    d0,(a0)
  614.     beq.s    .exit
  615.     move.l    d0,a1
  616.     lea    ARexxPortName,a0
  617.     move.l    a0,LN_NAME(a1)
  618.     jsr    AddPort(a6)
  619. .exit    rts
  620.  
  621. *-------
  622.  
  623. FreeARexx
  624.     move.l    ARexxPort,d2
  625.     beq.s    .exit
  626.     move.l    4.w,a6
  627.     move.l    d2,a1
  628.     jsr    RemPort(a6)    RemPort
  629.     move.l    d2,a0
  630.     jsr    DeleteMsgPort(a6)
  631. .exit    rts
  632.  
  633. *-------
  634.  
  635. GetARexxMsg
  636.     move.l    ARexxPort,d0
  637.     beq.s    .exit
  638.  
  639.     moveq    #0,d2
  640.  
  641.     move.l    4.w,a6
  642.     move.l    d0,a0
  643.     jsr    GetMsg(a6)
  644.     tst.l    d0
  645.     beq.s    .exit
  646.     
  647.     move.l    d0,a2
  648.     move.l    rm_ARG0(a2),a3
  649.  
  650.     lea    Blabla_Text,a0
  651.     bsr.s    CmpString
  652.     tst.l    d0
  653.     beq.s    .next
  654.     bsr    Hotkey_Routine
  655.     bra.s    .reply
  656.     
  657. .next    lea    Ende_Text,a0
  658.     bsr.s    CmpString
  659.     tst.l    d0
  660.     beq.s    .reply
  661.     moveq    #-1,d7
  662.  
  663. .reply    move.l    a2,a1
  664.     jsr    ReplyMsg(a6)
  665. .exit    rts
  666.  
  667. CmpString
  668.     move.l    a3,a1
  669. .loop    move.b    (a0)+,d0
  670.     beq.s    .null
  671.     bclr    #5,d0
  672.     cmp.b    (a1)+,d0
  673.     beq.s    .loop
  674. .bad    moveq    #0,d0
  675.     rts
  676. .null    tst.b    (a1)
  677.     bne.s    .bad
  678.     moveq    #-1,d0
  679.     rts
  680.  
  681. *-------
  682.  
  683. InitHotkey    
  684.     lea    NewBroker1,a5
  685.     loclea    BrokerTitle,6(a5)
  686.     loclea    BrokerText,10(a5)
  687.     move.l    4.w,a6
  688.     jsr    CreateMsgPort(a6)
  689.     move.l    d0,20(a5)
  690.     beq.s    .exit
  691.     
  692.     move.l    CxBase,a6
  693.     move.l    a5,a0
  694.     moveq    #0,d0
  695.     jsr    CxBroker(a6)
  696.     lea    Broker1,a0
  697.     move.l    d0,(a0)
  698.     beq.s    Cx_FreePort
  699.     
  700.     moveq    #1,d0        CxFilter
  701.     sub.l    a0,a0
  702.     sub.l    a1,a1
  703.     jsr    CreateCxObj(a6)
  704.     tst.l    d0
  705.     beq.s    Cx_FreeBroker
  706.     move.l    d0,a2
  707.  
  708.     move.l    d0,a0
  709.     lea    Hotkey_Text,a1
  710.     jsr    SetFilter(a6)
  711.     
  712.     moveq    #8,d0        CxCustom
  713.     lea    Hotkey_Routine,a0
  714.     sub.l    a1,a1
  715.     jsr    CreateCxObj(a6)
  716.     tst.l    d0
  717.     beq.s    Cx_FreeBroker
  718.     move.l    d0,a3
  719.  
  720.     move.l    Broker1,a0
  721.     move.l    a2,a1
  722.     jsr    AttachCxObj(a6)
  723.  
  724.     move.l    a2,a0
  725.     move.l    a3,a1
  726.     jsr    AttachCxObj(a6)        
  727.  
  728.     moveq    #1,d0
  729.     bsr.s    Cx_Activate
  730.     
  731. .exit    rts
  732.  
  733. *-------
  734.  
  735. Cx_Activate
  736.     move.l    CxBase,a6
  737.     move.l    Broker1,a0
  738.     jsr    ActivateCxObj(a6)
  739.     rts
  740.  
  741. *-------
  742.  
  743. FreeHotkey
  744.     move.l    CxBase,a6
  745.  
  746. Cx_FreeBroker
  747.     move.l    Broker1,a0
  748.     jsr    RemoveCxObj(a6)
  749.  
  750.     move.l    Broker1,a0
  751.     jsr    DeleteCxObjAll(a6)        
  752.  
  753. Cx_FreePort
  754.     move.l    4.w,a6
  755.     lea    NewBroker1,a5
  756.     move.l    20(a5),a0
  757.     jsr    DeleteMsgPort(a6)
  758.     rts
  759.     
  760. *-------
  761.  
  762. GetCxMsg
  763.     lea    NewBroker1,a0
  764.     move.l    20(a0),d0
  765.     beq.s    .exit
  766.     move.l    d0,a0
  767.     move.l    4.w,a6
  768.     jsr    GetMsg(a6)
  769.     move.l    d0,d6    
  770.     beq.s    .exit
  771.     
  772.     move.l    d0,a0
  773.     move.l    CxBase,a6
  774.     jsr    CxMsgID(a6)
  775.     move.l    d0,d2
  776.  
  777.     move.l    4.w,a6
  778.     move.l    d6,a1
  779.     jsr    ReplyMsg(a6)
  780.     
  781.     cmp.l    #15,d2
  782.     beq.s    .disable
  783.     cmp.l    #17,d2
  784.     beq.s    .enable
  785.     cmp.l    #19,d2
  786.     beq.s    .appear
  787. *    cmp.l    #21,d2
  788. *    beq.s    .disappear
  789.     cmp.l    #23,d2
  790.     bne.s    .exit
  791.     
  792. .kill    moveq    #-1,d7
  793.     bra.s    .exit
  794.  
  795. .disable
  796.     moveq    #0,d0
  797.     bsr    Cx_Activate
  798.     bra.s    .exit
  799. .enable    moveq    #1,d0
  800.     bsr    Cx_Activate
  801. .exit    rts
  802.  
  803. .appear    bsr    ShowAmigaGuide
  804.     bra.s    .exit
  805.  
  806. *-------
  807.  
  808. OpenGadgetWindow
  809.  
  810.     move.l    GadBase,d0
  811.     beq    .exit
  812.  
  813.     move.l    IntBase,a6
  814.     lea    GWindowData,a0
  815.     loclea    GWindowName,26(a0)
  816.     lea    GWindowTags,a1
  817.     jsr    OpenWindowTagList(a6)
  818.     lea    GWindow,a0
  819.     move.l    d0,(a0)
  820.  
  821.     move.l    GadBase,a6
  822.     move.l    Screen,a0
  823.     sub.l    a1,a1
  824.     jsr    GetVisualInfoA(a6)
  825.     lea    VInfo,a0
  826.     move.l    d0,(a0)
  827.     beq    .exit
  828.  
  829.     lea    GList,a0
  830.     jsr    CreateContext(a6)
  831.     move.l    d0,d2
  832.     beq    .exit
  833.     
  834.     lea    Text_Tab,a3
  835.     loclea    Guide_Text,(a3)+
  836.     loclea    Cx_Text,(a3)+
  837.     loclea    Loc_Text,(a3)+
  838.     loclea    Rexx_Text,(a3)+
  839.     loclea    Paladin_Text,(a3)+
  840.     loclea    Smooth_Text,(a3)
  841.     
  842.     lea    Text_Tab,a3
  843.     moveq    #5,d7
  844.     
  845. .Loop    moveq    #BUTTON_KIND,d0
  846.     move.l    d2,a0
  847.     lea    NewGadget1,a1
  848.     move.l    (a3)+,8(a1)
  849.     sub.l    a2,a2
  850.     jsr    CreateGadgetA(a6)
  851.     move.l    d0,d2
  852.     beq.s    .exit
  853.     
  854.     lea    NewGadget1,a0
  855.     move.w    6(a0),d0
  856.     addq.w    #2,d0
  857.     add.w    d0,2(a0)
  858.     addq.w    #4,16(a0)
  859.     dbra    d7,.Loop
  860.     
  861.     move.l    IntBase,a6
  862.     move.l    GWindow,a0
  863.     move.l    GList,a1
  864.     moveq    #-1,d0
  865.     moveq    #-1,d1
  866.     sub.l    a2,a2
  867.     jsr    AddGList(a6)
  868.     
  869.     move.l    GList,a0
  870.     move.l    GWindow,a1
  871.     sub.l    a2,a2
  872.     jsr    RefreshGadgets(a6)    
  873.     
  874.     move.l    GadBase,a6
  875.     move.l    GWindow,a0
  876.     sub.l    a1,a1
  877.     jsr    GT_RefreshWindow(a6)
  878.     
  879. .exit    rts
  880.  
  881. *-------------------------------------------
  882.  
  883. CloseGadgetWindow
  884.  
  885.     move.l    GList,d0
  886.     beq.s    .close
  887.     
  888.     move.l    IntBase,a6
  889.     move.l    GWindow,a0
  890.     move.l    GList,a1
  891.     moveq    #-1,d0
  892.     jsr    RemoveGList(a6)
  893.     
  894.     move.l    GadBase,a6
  895.     move.l    GList,a0
  896.     jsr    FreeGadgets(a6)
  897.     
  898.     move.l    VInfo,a0
  899.     jsr    FreeVisualInfo(a6)
  900.  
  901. .close    move.l    IntBase,a6
  902.     move.l    GWindow,a0
  903.     jsr    CloseWindow(a6)
  904.     rts
  905.  
  906. *-------------------------------------------
  907.  
  908. GetGadgetMsg
  909.     move.l    4.w,a6
  910.     move.l    GWindow,a0
  911.     move.l    wd_UserPort(a0),a0
  912.     jsr    GetMsg(a6)
  913.     tst.l    d0
  914.     beq.s    .exit
  915.     move.l    d0,a1
  916.     move.l    im_Class(a1),d5
  917.     move.l    im_IAddress(a1),a0
  918.     move.w    gg_GadgetID(a0),d6
  919.     
  920.     jsr    ReplyMsg(a6)
  921.     
  922.     cmp.l    #IDCMP_GADGETUP,d5
  923.     bne.s    .exit
  924.     
  925.     cmp.w    #20,d6
  926.     beq.s    .Smooth
  927.     
  928.     lea    MyNag_Node,a0
  929.     lea    Text_Tab,a1
  930.     move.l    (a1,d6.w),(a0)
  931.     
  932.     bsr.s    ShowAmigaGuide
  933.     
  934. .exit    moveq    #0,d7
  935.     rts    
  936.  
  937. .Smooth    tst.b    Smooth
  938.     bne.s    .Smooth2
  939.     bsr    DrawFirstLine_2
  940.     bra.s    .exit
  941. .Smooth2
  942.     bsr    DrawFirstLine_1
  943.     bra.s    .exit
  944.  
  945.  
  946. *-------------------------------------------
  947.  
  948. ShowAmigaGuide
  949.  
  950.     move.l    AgBase,d0
  951.     beq.s    .exit
  952.     
  953.     move.l    DosBase,a6
  954.     jsr    GetProgramDir(a6)
  955.     lea    MyNag_Lock,a0
  956.     move.l    d0,(a0)
  957.     beq.s    .exit
  958.     
  959.     bsr.s    Hotkey_Routine
  960.     
  961.     move.l    AgBase,a6
  962.     lea    MyNag,a0
  963.     sub.l    a1,a1
  964.     jsr    OpenAmigaGuideA(a6)
  965.     
  966.     move.l    d0,a0
  967.     jsr    CloseAmigaGuide(a6)
  968.  
  969. .exit    rts
  970.  
  971. *-------
  972.  
  973. Hotkey_Routine
  974.     movem.l    d0-a6,-(sp)    unbedingt alle Register retten !
  975.     move.l    IntBase,a6
  976.     move.l    Screen,a0
  977.     jsr    ScreenToFront(a6)
  978.     movem.l    (sp)+,d0-a6    
  979.     rts
  980.  
  981. *-------------------------------------------
  982.  
  983. LocBase        dc.l    0
  984. CxBase        dc.l    0
  985. AgBase        dc.l    0
  986. DosBase        dc.l    0
  987. IntBase        dc.l    0
  988. GfxBase        dc.l    0
  989. GadBase        dc.l    0
  990. Window        dc.l    0
  991. TempBM        dc.l    0
  992. ExtSprite    dc.l    0
  993. RastPort    dc.l    0
  994. Locale1        dc.l    0
  995. Catalog1    dc.l    0
  996. MyWBMsg        dc.l    0
  997. GList        dc.l    0
  998. GWindow        dc.l    0
  999. ARexxPort    dc.l    0
  1000. Broker1        dc.l    0
  1001.  
  1002. ScreenData    dc.w    0,0,640,280,8,1,0,15
  1003.         dc.l    Topaz8,0,0,0
  1004.  
  1005. WindowData    dc.w    0,11,640,269,1
  1006.         dc.l    $200220,$3140c,0,0,0
  1007. Screen        dc.l    0,0    
  1008.         dc.w    50,50,640,400,15    
  1009.  
  1010. WindowTags    dc.l    WA_BusyPointer,TRUE
  1011.         dc.l    TAG_DONE
  1012.  
  1013. ScreenTags    dc.l    SA_Pens,PenArray
  1014.         dc.l    SA_DisplayID,$8804
  1015.         dc.l    SA_Colors32,ColorTable    
  1016.         dc.l    SA_PubName,ScreenPubName
  1017.         dc.l    SA_Interleaved,TRUE
  1018.         dc.l    TAG_DONE
  1019.  
  1020. PointerTags    dc.l    WA_Pointer,0
  1021.         dc.l    WA_PointerDelay,TRUE
  1022.         dc.l    TAG_DONE
  1023.  
  1024. SpriteTags    dc.l    POINTERA_BitMap,0
  1025.         dc.l    POINTERA_XOffset,-6
  1026.         dc.l    POINTERA_WordWidth,4
  1027.         dc.l    POINTERA_XResolution,4
  1028.         dc.l    POINTERA_YResolution,2
  1029.         dc.l    TAG_DONE
  1030.  
  1031. GWindowData    dc.w    520,0,120,105,1
  1032.         dc.l    $60,$30406,0,0,0
  1033.         dc.l    0,0
  1034.         dc.w    10,10,600,280,2
  1035.     
  1036. GWindowTags    dc.l    WA_PubScreenName,ScreenPubName
  1037.         dc.l    TAG_DONE
  1038.  
  1039. ColorTable    dc.w    8,0
  1040.         dc.l    $9c9c9c9c,$9c9c9c9c,$9c9c9c9c
  1041.         dc.l    $ffffffff,$ffffffff,$ffffffff
  1042.         dc.l    $46464646,$66666666,$bfbfbfbf
  1043.         dc.l    $f4f4f4f4,$e8e8e8e8,$00000000
  1044.         dc.l    $00000000,$00000000,$00000000
  1045.         dc.l    $01010101,$01010101,$01010101
  1046.         dc.l    $02020202,$02020202,$02020202
  1047.         dc.l    $03030303,$03030303,$03030303
  1048.         dc.w    3,17
  1049.         dc.l    $e8e8e8e8,$00000000,$00000000
  1050.         dc.l    $00000000,$00000000,$00000000
  1051.         dc.l    $eeeeeeee,$dddddddd,$cccccccc
  1052.         dc.l    0
  1053.     
  1054. PenArray    dc.w    0,0,4,1,4,2,3,0,1,4,1,4,-1
  1055.  
  1056. EasyStruct    dc.l    es_SIZEOF,0,ReqTitle,0,ReqButton
  1057.  
  1058. Topaz8        dc.l    FontName
  1059.         dc.w    8,0
  1060. MyNag
  1061. MyNag_Lock    dc.l    0
  1062. MyNag_Name    dc.l    NagName
  1063. MyNag_Screen    dc.l    0
  1064. MyNag_ScreenName dc.l    ScreenPubName
  1065. MyNag_Port    dc.l    0
  1066. MyNag_ClientPort dc.l    0
  1067. MyNag_BaseName    dc.l    BaseName
  1068. MyNag_Flags    dc.l    0
  1069. MyNag_Context    dc.l    0
  1070. MyNag_Node    dc.l    NodeName
  1071. MyNag_Line    dc.l    0
  1072. MyNag_Extens    dc.l    0
  1073. MyNag_Private    dc.l    0
  1074.  
  1075. NewGadget1    dc.w    5,5,100,12
  1076.         dc.l    0,Topaz8
  1077.         dc.w    0
  1078.         dc.l    $10
  1079. VInfo        dc.l    0,0
  1080.  
  1081. NewBroker1    dc.b    5,0        Version
  1082.         dc.l    BrokerName
  1083.         dc.l    0        BrokerTitle
  1084.         dc.l    0        BrokerText
  1085.         dc.w    0
  1086.         dc.w    4        Show/Hide
  1087.         dc.b    0,0
  1088.         dc.l    0        MsgPort
  1089.         dc.w    0        Strukturende
  1090.  
  1091. Smooth        dc.b    0
  1092.  
  1093. CxName        dc.b    'commodities.library',0
  1094. LocName        dc.b    'locale.library',0
  1095. AgName        dc.b    'amigaguide.library',0
  1096. DosName        dc.b    'dos.library',0
  1097. IntName        dc.b    'intuition.library',0
  1098. GfxName        dc.b    'graphics.library',0
  1099. GadName        dc.b    'gadtools.library',0
  1100. PointerClass    dc.b    'pointerclass',0
  1101. FontName    dc.b    'topaz.font',0
  1102. CatName        dc.b    'A1200Demo.catalog',0
  1103. NodeName    dc.b    'MAIN',0
  1104. NagName        dc.b    'A1200Demo.guide',0
  1105. BaseName    dc.b    'Demo.guide',0
  1106. ARexxPortName    dc.b    'A1200DEMO_REXX',0
  1107. Blabla_Text    dc.b    'SCREENTOFRONT',0
  1108. Ende_Text    dc.b    'ENDE',0
  1109. ScreenPubName    dc.b    'A1200.DemoScreen',0 
  1110. ReqButton    dc.b    'Ok',0
  1111. ReqTitle    dc.b    'A1200Demo',0
  1112. VersionStr    dc.b    '$VER: A1200Demo 40.1 (11.8.93) - by PALADIN SOFTWARE',0
  1113. Hotkey_Text    dc.b    'ctrl q',0
  1114. BrokerName    dc.b    'A1200Demo',0
  1115.  
  1116. LOCALE_START
  1117. *-----------------------
  1118.     CATALOG    A1200Demo
  1119.     CATDATE    11.8.93
  1120.     VERSION    40.1
  1121. *-----------------------
  1122. ScreenName    dc.b    'Hires-HAM8 Screen',0
  1123.         D    'Hires-HAM8 Bildschirm',0
  1124. WindowName    dc.b    'Color-run',0
  1125.         D    'Farbverlauf',0
  1126. ReqNoAA        dc.b    'No AGA chipset present !',0
  1127.         D    'Kein AA-Chipset vorhanden !',0
  1128. ReqNo68020    dc.b    'No MC68020 or higher present !',0
  1129.         D    'Kein MC68020 oder höher vorhanden !',0
  1130. ReqNoScreen    dc.b    "Couldn't open screen !",0
  1131.         D    'Kann Bildschirm nicht öffnen !',0
  1132. GWindowName    dc.b    'Help',0
  1133.         D    'Hilfe',0
  1134. Guide_Text    dc.b    'AmigaGuide',0
  1135.         D    '',0
  1136. Cx_Text        dc.b    'Commodities',0
  1137.         D    '',0
  1138. Loc_Text    dc.b    'Locale',0
  1139.         D    '',0
  1140. Rexx_Text    dc.b    'ARexx',0
  1141.         D    '',0
  1142. Paladin_Text    dc.b    'PALADIN',0
  1143.         D    '',0
  1144. Smooth_Text    dc.b    'Smooth',0
  1145.         D    'Weich',0
  1146. BrokerTitle    dc.b    'A1200Demo by PALADIN SOFTWARE',0
  1147.         D    'A1200Demo von PALADIN SOFTWARE',0
  1148. BrokerText    dc.b    'a demo for the Amiga 1200',0
  1149.         D    'ein Demo für den Amiga 1200',0
  1150. *-----------------------
  1151. LOCALE_END
  1152.  
  1153.  
  1154.     SECTION    'Buffers',BSS_C    
  1155. Text_Tab    ds.l    7
  1156. PointerBM    ds.b    bm_SIZEOF
  1157. TempRP        ds.b    rp_SIZEOF
  1158. Pixels        ds.b    20000
  1159.  
  1160.     SECTION    'Sprite Data',DATA_C
  1161. PointerPlane0    dc.w    $0180,$0180,$0180,$0ff0,$3ffc,$7ffe,$ffff,$ffff
  1162.         dc.w    $ffff,$ffff,$ffff,$ffff,$7ffe,$7ffe,$3ffc,$0ff0
  1163. PointerPlane1    dc.w    $0c60,$3e70,$6018,$0000,$0000,$0660,$0440,$0000
  1164.         dc.w    $0000,$0000,$0000,$0ef0,$07e0,$0340,$0000,$0000
  1165.     
  1166.     
  1167.